package Controle;

import util.Constantes;
import java.awt.Color;
import java.awt.Font;

import Jplay.GameImage;
import Jplay.Keyboard;
import Jplay.Mouse;
import Jplay.Window;
import MotorGrafico.Indice;
import MotorGrafico.InterfaceTela;
import MotorGrafico.MotorGrafico;
import MotorGrafico.Tabuleiro;

/**
 * Classe respons�vel pela tela de promo��o do pe�o.
 * 
 * @author Gefersom C. Lima
 * 
 */

public class TelaPromocaoPeao implements InterfaceTela {

	GameImage fundo;
	GameImage rainha;
	GameImage torre;
	GameImage bispo;
	GameImage cavalo;
	GameImage selecao;
	int pecaSelecionada;
	int corDaPeca;
	int pecaEscolhida;
	int descX;
	int descY;
	String msgEscolherPeca;
	String msgPecaSelecionada;
	Font msgFonte;

	/**
	 * Construtor da clsse
	 * 
	 * @param corDaPeca
	 *            - cor da pe�a que deve ser apresentada na tela.
	 */
	public TelaPromocaoPeao(int corDaPeca) {

		this.corDaPeca = corDaPeca;
	}

	/**
	 * Instancia os objetos a serem usados.
	 */
	@Override
	public void carregar() {

		if (corDaPeca == Constantes.WHITE_PEAO) {
			rainha = new GameImage(Constantes.IMG_WHITE_RAINHA);
			torre = new GameImage(Constantes.IMG_WHITE_TORRE);
			bispo = new GameImage(Constantes.IMG_WHITE_BISPO);
			cavalo = new GameImage(Constantes.IMG_WHITE_CAVALO);
		} else {
			rainha = new GameImage(Constantes.IMG_BLACK_RAINHA);
			torre = new GameImage(Constantes.IMG_BLACK_TORRE);
			bispo = new GameImage(Constantes.IMG_BLACK_BISPO);
			cavalo = new GameImage(Constantes.IMG_BLACK_CAVALO);
		}

		this.selecao = new GameImage(Constantes.IMG_TELA_PROMO_PEAO_SELECAO);
		this.fundo = new GameImage(Constantes.IMG_TELA_PROMO_PEAO_FUNDO);
		this.msgFonte = new Font("Forte", Font.TRUETYPE_FONT, 15);
		configuracaoInicial();
	}

	/**
	 * Seta as configura��es iniciais.
	 */
	public void configuracaoInicial() {
		descY = 250;
		descX = 160;

		rainha.x = descX;
		rainha.y = descY;

		torre.x = rainha.x + rainha.width;
		torre.y = descY;

		bispo.x = torre.x + torre.width;
		bispo.y = descY;

		cavalo.x = bispo.x + bispo.width;
		cavalo.y = descY;

		selecao.y = descY;
		selecao.x = descX;

		fundo.x = descX - 50;
		fundo.y = descY - 40;

		pecaSelecionada = Constantes.TELA_PROMO_PEAO_RAINHA;

		this.msgEscolherPeca = "O Pe�o ser� promivido a ";
		this.msgPecaSelecionada = "";
	}

	/**
	 * Anula a ref�ncia dos objetos usados.
	 */
	@Override
	public void descarregar() {
		rainha = null;
		torre = null;
		bispo = null;
		cavalo = null;
	}

	/**
	 * L�gica do da tela de promo��o.
	 */
	@Override
	public void logica() {
		Mouse mouse = MotorGrafico.getInstancia().getJanela().getMouse();
		if (mouse.isOverObject(rainha)) {
			selecao.x = rainha.x;
			pecaSelecionada = Constantes.TELA_PROMO_PEAO_RAINHA;
			msgPecaSelecionada = "Rainha";
		} else if (mouse.isOverObject(torre)) {
			selecao.x = torre.x;
			pecaSelecionada = Constantes.TELA_PROMO_PEAO_TORRE;
			msgPecaSelecionada = "Torre";
		} else if (mouse.isOverObject(bispo)) {
			selecao.x = bispo.x;
			pecaSelecionada = Constantes.TELA_PROMO_PEAO_BISPO;
			msgPecaSelecionada = "Bispo";
		} else if (mouse.isOverObject(cavalo)) {
			selecao.x = cavalo.x;
			pecaSelecionada = Constantes.TELA_PROMO_PEAO_CAVALO;
			msgPecaSelecionada = "Cavalo";
		} else {
			pecaSelecionada = 0;
			msgPecaSelecionada = "";
		}

		if (mouse.isLeftButtonPressed() && pecaSelecionada != 0) {
			pecaEscolhida = pecaSelecionada;
		}
	}

	/**
	 * Retorna o n�mero que representa a pe�a escolhida
	 * 
	 * @return int
	 */

	public int getPecaEscolhida() {
		return this.pecaEscolhida;
	}

	/**
	 * Desenha as imagens que constituem a tela de promo��o.
	 */
	@Override
	public void desenhar() {
		// MotorGrafico.getInstancia().getJanela().clear(Color.black);
		fundo.draw();
		selecao.draw();
		rainha.draw();
		torre.draw();
		bispo.draw();
		cavalo.draw();
		MotorGrafico
				.getInstancia()
				.getJanela()
				.drawText(msgEscolherPeca, descX + 40, descY - 15,
						Color.yellow, msgFonte);
		MotorGrafico
				.getInstancia()
				.getJanela()
				.drawText(msgPecaSelecionada, descX + 200, descY - 15,
						Color.green);
		MotorGrafico.getInstancia().getJanela().update();
	}

	/**
	 * Controla qual tela dever� ser acionada posteriormente.
	 */
	@Override
	public void proxTela() {
	}

}
